Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在没有输入事件的情况下向viber发送消息?_Php_Viber Api - Fatal编程技术网

Php 如何在没有输入事件的情况下向viber发送消息?

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脚本用于向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 = "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);
}