我想知道应该使用哪种方法才能通过Nexmo接收消息。是否有人对此问题有任何经验,因为Nexmo似乎没有关于如何通过那里的库接收消息的清晰文档。任何帮助都会很棒。

最佳答案

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

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

我建议从一个简单的servlet开始,该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,并检查末尾带有/YOUR_PROJECT_NAME/inbound的ngrok URL是否按预期工作。然后进入Nexmo仪表板Your Numbers,然后在要接收SMS消息的号码上单击“编辑”。输入您在上面测试的Ngrok URL。

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

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


Nexmo site中记录了如何工作的详细信息

关于java - Nexmo接收SMS Java,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44103987/

10-11 22:02