0

我想知道我应该使用什么方法来通过 Nexmo 接收消息。有没有人在这个问题上有任何经验,因为 Nexmo 似乎没有关于如何通过那里的库接收消息的明确文档。任何帮助都会很棒。

4

1 回答 1

4

对于您拥有的每个 Nexmo 号码,您可以配置一个 URL,当该号码收到 SMS 时,Nexmo 将调用该 URL。GET 请求将包含有关接收到的 SMS 的信息作为请求参数。

增加了一点复杂性(在您进行开发时),因为 Nexmo 需要能够访问托管在您的开发机器上的 URL,这可能在 Internet 上不公开!为此,您需要运行Ngrok 之类的东西,它将为您的本地计算机上的端口提供一条隧道,并使用公共 URL。

我建议从打印出其参数的简单 servlet 开始:

public class InboundSMSServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req,
                         HttpServletResponse resp)
            throws ServletException,
                   java.io.IOException {
        System.out.println("Received: " + req.getMethod());
        for (String param : Collections.list(req.getParameterNames())) {
            String value = req.getParameter(param);
            System.out.println(param + ": " + value);
        }
    }
}

...将其配置为方便的 URL ...

<servlet>
    <servlet-name>inbound-sms</servlet-name>
    <servlet-class>getstarted.InboundSMSServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>inbound-sms</servlet-name>
    <url-pattern>/inbound</url-pattern>
</servlet-mapping>

同时运行您的 servlet 容器和 ngrok,并检查最后的 ngrok URL 是否/YOUR_PROJECT_NAME/inbound按预期工作。然后进入 Nexmo 仪表板,您的号码,然后在您想要接收 SMS 消息的号码上点击编辑。输入您在上面测试的 Ngrok URL。

现在向您配置的号码发送一条短信,您应该会看到您的消息内容打印到控制台;就像是:

Received: GET
messageId: 0B0000004A2D09D9
to: 447520666777
text: Hello Nexmo!
msisdn: 447720123123
type: text
keyword: HELLO
message-timestamp: 2017-04-27 14:41:32

Nexmo 网站上记录了其工作原理的详细信息

于 2017-05-26T09:05:45.537 回答