2017-09-16 34 views
0

私は自分のサイトでTwilio PHP APIを使用しています。目標は、私たちのゲーム仲間のメンバーが自分の名前と問題を含むフォームを記入することです。テキストは、サーバーを修正するためのアクセス権を持つ管理者の所定のリストに送信されます。Twilio - 着信メッセージの本文に基づいてSMSを送信

この部分はすごくうまくいきます。私は自分のサイトのフォームに記入することができ、問題なくテキストを送信します。

<?php 
require_once "autoload.php"; 
use Twilio\Rest\Client; 

$AccountSid = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; 
$AuthToken = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; 

$client = new Client($AccountSid, $AuthToken); 

    $sms = $client->account->messages->create(
     $_REQUEST["to"], 
     array(
      'from' => "+zzzzzzzzzz", 
      'body' => "Help!". $_REQUEST["name"]. " says ". $_REQUEST["message"].". Reply GOTIT to alert other techs." 
     ) 
    ); 

私は管理者が誰かがすでに問題に取り組んでいる他の管理者に警告する「GOTIT」を返信することができることができるようにしたいです。私のTwilio番号が「GOTIT」のテキストを受け取ったとき、あらかじめ決められたSMSをあらかじめ決められた管理者のリストに送るようにしたい(何も動的なものは必要ありません)。私はこれまでのところ(下)私の「アラートresponse.php」ファイルに

を指すようにウェブフックを設定している

、私は見つけることができる唯一のTwilioのドキュメントでは、メッセージの送信者に返信に関してれる私がしたいです(特定のユーザーリストに返信する)
-https://www.twilio.com/docs/guides/how-to-receive-and-reply-in-php#what-is-a-webhook

誰も私の出発点がありますか?私はこれを試してみたが、それは実りされていない(アラートresponse.php) -

<?php 

require_once "autoload.php"; 
use Twilio\Rest\Client; 

// make an associative array of senders we know, indexed by phone number 
$people = array(
    "+zzzzzzzzzz"=>"Tech 1", 
    "+zzzzzzzzzz"=>"Tech 2", 
    "+zzzzzzzzzz"=>"Tech 3", 
); 

// if the sender is known, then greet them by name 
// otherwise, consider them just another monkey 
if(!$name = $people[$_REQUEST['From']]) { 
    $name = "unknown"; 
} 

$body = $_REQUEST['body']; 

if($body == 'GOTIT'){ 
    $response->message('Looks like $name is taking care of this server alert! Reply HELP if you need a hand.'); 
}else if($body == 'HELP'){ 
    $response->message('On second thought, maybe $name could use a hand with this problem.'); 
} 
print $response; 

次の2つのヘルプドキュメントのフランケンシュタインに基づいて: - HTTPS://www.twilio.com/docs/quickstart/php/sms/reply-to-sms-messages - https://www.twilio.com/docs/guides/how-to-receive-and-reply-in-php#custom-responses-着信SMSメッセージ

ありがとうございました!更新


をここであなたは私を示したものに基づいて更新アラートresponse.phpです。私はいくつかの小さな変更の後にデバッガでエラーが発生しないが、私はいずれかのSMS応答を取得していないよ。その上の任意のアイデア?

(また、私は実際にそれをここに投稿することができますので、適切にフォーマットするPHPコードを取得することはできませんので、私はうまくいけば、それはルール違反ではないのか?私はいくつかのサードパーティ製のクリップボードのウェブサイトを使用しますね?)

http://www.wepaste.com/46258103/

+0

私はあなたがセマンティクスで少し失われていると思います。送信者に返信したくないのではなく、一連の新しいメッセージを送信するように思えます。 したがって、webhookファイル(alert-response.php)は、最初のコードブロックと同様に機能するはずです。 –

+0

それはもっと意味があります。まだ私の返事を送信するために受信テキストの本文をチェックする方法についてはまだ不明です。 –

答えて

0

あなたはその答えに非常に近いと思われます。

TwilioがSMS(Inbound SMS)を受信すると、サーバー内の特定のURLエンドポイント(HTTP Request)を呼び出すことができます。 Twilio webhook

Webページ(HTTP Response)が応答(Outbound SMS)としてユーザに返送されるコンテンツ。したがって、print $response;は、Inbound SMSの著者への返信として送信されるメッセージの内容を印刷します。

他のユーザーにそのメッセージへの反応としてメッセージを送信する場合は、新しいメッセージを作成するコードを追加する必要があります。

あなたalert-response.phpは、送信者とメッセージ他の管理者の両方に返信することができます:ここに

<?php 

require_once "autoload.php"; 
use Twilio\Rest\Client; 

// make an associative array of senders we know, indexed by phone number 
$people = array(
    "+zzzzzzzzzz"=>"Tech 1", 
    "+zzzzzzzzzz"=>"Tech 2", 
    "+zzzzzzzzzz"=>"Tech 3", 
); 

// if the sender is known, then greet them by name 
// otherwise, consider them just another monkey 
if(!$name = $people[$_REQUEST['From']]) { 
    $name = "unknown"; 
} 

$body = $_REQUEST['body']; 

if($body == 'GOTIT'){ 
    // response to admin that send GOTIT 
    $response->message('Thanks for taking care of it.'); 

    // now creates a message to tell other admins that someone 
    // is taking care of it 
    $client = new Client($AccountSid, $AuthToken); 
    $sms = $client->account->messages->create(
     TO, 
     array(
     'from' => "+zzzzzzzzzz", 
     'body' => "Looks like $name is taking care of this server alert!" 
    ); 
); 

}else if($body == 'HELP'){ 
    // response to the admin that replied with HELP 
    $response->message('Ok. I will tell others that you need help'); 


    // now creates a message to tell other admins that someone 
    // is taking care of it 
    $client = new Client($AccountSid, $AuthToken); 
    $sms = $client->account->messages->create(
     TO, 
     array(
     'from' => "+zzzzzzzzzz", 
     'body' => "Looks like $name needs help!!" 
    ); 
} 

// keep in mind that response is sent to the person that sent the 
// SMS in first place, not to the other admins. 
print $response; 
+0

コメントを返信する方法を変更できませんでしたか?だからオリジナルの投稿の編集として追加しました。あなたが見て、私が間違っている場所を教えてくれると思いますか?私があなたが提供したスクリプトで来るメッセージを受け取っていないようだ。あなたの構文は理にかなっています。あなたの助けにお返事ありがとうございます。 –

+0

@DarrenR私が書いたコードは実行されないことに注意してください。一連の不足している変数があります。例えば、 '$ response'は決して作成されません。それにもかかわらず、最初の質問に対する答えは依然として上記のものです。 あなたのフォローアップの問題は別のものです。あなたは '$ response'を定義する必要があります。 Twilioドキュメンテーションから: '$ response = new Twiml;')。他のエラーがないかサーバーログを確認してください! –

1

Twilioの開発者エバンジェリスト。

responding to an incoming SMS message with TwiML属性を持たない<Message>を使用すると、応答は元の番号に戻されます。

しかし、to attributeを使用して他の番号にメッセージを送信するようにTwilioに指示することもできます。 <Message>要素を複数返すことで、複数のメッセージを送信することもできます。一緒に、これらの二つのことを追加

では、次のような何かを行うことができますことを意味します

<?php 
require_once './vendor/autoload.php'; 
use Twilio\Twiml; 

$people = array(
    "+zzzzzzzzzz"=>"Tech 1", 
    "+zzzzzzzzzz"=>"Tech 2", 
    "+zzzzzzzzzz"=>"Tech 3", 
); 

if(!$name = $people[$_REQUEST['From']]) { 
    $name = "unknown"; 
} 

$response = new Twiml(); 
foreach ($people as $number => $techName) { 
    $response->message('Looks like $name is taking care of this server alert!', ['to' => $number])); 
} 

echo $response; 

それがすべてで助けなら、私に教えてください。

関連する問題