如何接收viber REST API回调(使用Java,Spring)?

时间:2019-10-09 12:14:22

标签: java spring rest viber

我正在尝试使用java / spring制作viber bot(公共帐户)。我成功为机器人设置了webhook(通过将其部署到heroku并发出发布请求

{ "url":"https://my.host.com" }

使用邮递员),现在我正尝试接收来自用户的消息。问题是我是使用spring的新手,实际上不知道如何接收任何viber事件。

这是我的代码(只是检查我是否可以接收viber回调):

@RestController 
@SpringBootApplication 
public class DemoApplication {

public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
}

@RequestMapping
public String request(@RequestHeader("X-Viber-Content-Signature") String serverSideSignature) {
    System.out.println("Here we go!");
    System.out.println(serverSideSignature);
    return "Hello world!";
}
}

但是,这不起作用。如果我使用诸如

之类的Postman要求提供必需的serverSideSignature(来自文档的示例)进行请求

{ "event":"message", "timestamp":1457764197627, "message_token":4912661846655238145, "sender":{ "id":"01234567890A=", "name":"John McClane", "avatar":"http://avatar.example.com", "country":"UK", "language":"en", "api_version":1 }, "message":{ "type":"text", "text":"a message to the service", "media":"http://example.com", "location":{ "lat":50.76891, "lon":6.11499 }, "tracking_data":"tracking data" } }

我可以看到控制台输出。但是,如果我向机器人发送消息,它将无法工作(甚至无法从日志中获取任何信息)。我想问题是我不了解viber如何将任何信息发送到我的网络挂钩,但是也许有人可以为我解释一下吗?非常感谢。

P.S。 Viber REST API documentation

1 个答案:

答案 0 :(得分:0)

@RequestMapping默认情况下使用GET方法,而Viber使用POST方法将回调发送到Webhook。尝试将@RequestMapping更改为@PostMapping,当然,您应该确保正确设置了Webhook,并且URL具有来自受信任CA的有效且正式的SSL证书。