我正在尝试使用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如何将任何信息发送到我的网络挂钩,但是也许有人可以为我解释一下吗?非常感谢。
答案 0 :(得分:0)
@RequestMapping默认情况下使用GET方法,而Viber使用POST方法将回调发送到Webhook。尝试将@RequestMapping更改为@PostMapping,当然,您应该确保正确设置了Webhook,并且URL具有来自受信任CA的有效且正式的SSL证书。