Php 如何在没有输入事件的情况下向viber发送消息?
我有一个小问题,我有一个php脚本用于向viber发送消息。问题是,当我用我的配置文件发送一些消息时,bot会发送消息,但我只想运行php脚本并将消息发送到聊天室 检查脚本:Php 如何在没有输入事件的情况下向viber发送消息?,php,viber-api,Php,Viber Api,我有一个小问题,我有一个php脚本用于向viber发送消息。问题是,当我用我的配置文件发送一些消息时,bot会发送消息,但我只想运行php脚本并将消息发送到聊天室 检查脚本: <?php use Alserom\Viber\Request\Type\SendMessage; ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); $access_token
<?php
use Alserom\Viber\Request\Type\SendMessage;
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$access_token = "TOKEN HERE";
$request = file_get_contents("php://input");
$input = json_decode($request, true);
if ($input['event'] == 'webhook') {
$webhook_response['status'] = 0;
$webhook_response['status_message'] = "ok";
$webhook_response['event_tyes'] = "delivered";
echo json_encode($webhook_response);
die;
} else if ($input['event'] == 'message') {
$text_received = $input['message']['text'];
$sender_id = $input['sender']['id'];
$sender_name = $input['sender']['name'];
$message_to_replay = "hello";
$data['auth_token'] = $access_token;
$data['receiver'] = $sender_id;
$data['type'] = "text";
$data['text'] = $message_to_replay;
sendMessage($data);
} else {
$message_to_replay = "Messageeeeeee";
$data['auth_token'] = $access_token;
/* $data['receiver'] = $sender_id; */
$data['type'] = "text";
$data['text'] = $message_to_replay;
sendMessage($data);
}
function sendMessage($data) {
$url = "https://chatapi.viber.com/pa/send_message";
$jsonData = json_encode($data);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
$result = curl_exec($ch);
return $result;
}
?>
我应该放一些静态接收器ID吗?如何获取某个用户的ID
***更新*****
我在ELSE语句中添加了订阅用户的静态ID。。。现在,当我运行脚本时,它会立即发送,但现在它会发送100条相同的消息。如何限制只发送一条消息
else {
$message_to_replay = "Messageeeeeee";
$data['auth_token'] = $access_token;
$data['receiver'] = "staticID";
$data['type'] = "text";
$data['text'] = $message_to_replay;
sendMessage($data);
}
根据,您只能向订阅您的bot的帐户发送消息:
send_message API允许帐户向订阅帐户的Viber用户发送消息
用户id的要求是,它必须是订阅bot的用户的用户id,因此这应该是您检查的第一步
编辑:我建议通过向您的bot发送初始消息或其他内容来保存订阅用户的用户ID,然后您可以通过获取以前保存的用户ID向他们发送消息。根据,您只能向订阅您的bot的帐户发送消息:
send_message API允许帐户向订阅帐户的Viber用户发送消息
用户id的要求是,它必须是订阅bot的用户的用户id,因此这应该是您检查的第一步
编辑:我建议通过向您的bot发送初始消息或其他内容来保存订阅用户的用户ID,然后您可以通过获取以前保存的用户ID向他们发送消息。如果您的脚本在5秒内没有响应,或者响应的HTML状态代码不等于200,则Viber服务器将尝试重新发送每分钟发送一次此webhook。如果您的脚本在5秒内没有响应,或者响应的HTML状态代码不等于200,则Viber服务器将每分钟尝试重新发送此webhook。我已找到一个订阅用户的ID,并添加了该静态值。。。现在,当我运行脚本时,它可以工作,但还有另一个问题。。。脚本发送100条相同的消息。如何将其限制为1?我已找到一个订阅用户的ID并添加了该静态值。。。现在,当我运行脚本时,它可以工作,但还有另一个问题。。。脚本发送100条相同的消息。如何将其限制为1?您向我们展示的代码中没有循环或任何内容,因此根据我们目前掌握的信息,没有合理的解释为什么这应该发送100条消息,而不是单个消息。还是说每次运行脚本时都会发送相同的消息?如果你不想再发送第二次消息,你就必须存储信息,你已经发送了,在某处…我只运行了一次脚本,它发送了100条消息。我的脚本中没有循环,我不知道为什么它会发送很多消息。我正在考虑将发送的数据存储在数据库中,并检查它是否已发送。。。但我认为有一个更简单的解决方案,这个脚本最初似乎是用来处理webhooks请求的。可能服务正在向您的webhook端点发送请求,但输入事件既不是
webhook
也不是message
?在这种情况下,您的脚本将进入else分支,然后…再次发送消息。不要试图在一个脚本中处理多个本质上完全不同的事情。从webhook脚本中删除此部分,然后为您发送消息的内容创建一个额外的脚本,然后看看您是否仍然遇到同样的问题。谢谢,现在它可以工作了。我还有一个问题。如何将bot添加到某个组?我需要在一个地方发送该消息一次,所有用户都需要看到。我可以看到所有订阅的用户,但我看不到他们的消息。您向我们展示的代码中没有循环或任何内容,因此,根据我们目前掌握的信息,没有合理的解释为什么应该发送100条消息,而不是一条。还是说每次运行脚本时都会发送相同的消息?如果你不想再发送第二次消息,你就必须存储信息,你已经发送了,在某处…我只运行了一次脚本,它发送了100条消息。我的脚本中没有循环,我不知道为什么它会发送很多消息。我正在考虑将发送的数据存储在数据库中,并检查它是否已发送。。。但我认为有一个更简单的解决方案,这个脚本最初似乎是用来处理webhooks请求的。可能服务正在向您的webhook端点发送请求,但输入事件既不是webhook
也不是message
?在这种情况下,您的脚本将进入else分支,然后…再次发送消息。不要试图在一个脚本中处理多个本质上完全不同的事情。从webhook脚本中删除此部分,然后为您发送消息的内容创建一个额外的脚本,然后看看您是否仍然遇到同样的问题。谢谢,现在它可以工作了。我还有一个问题。如何将bot添加到某个组?我需要在一个地方发送该消息一次,所有用户都需要看到。我可以看到所有已订阅的用户,但无法通过bot查看他们的消息
else {
$message_to_replay = "Messageeeeeee";
$data['auth_token'] = $access_token;
$data['receiver'] = "staticID";
$data['type'] = "text";
$data['text'] = $message_to_replay;
sendMessage($data);
}