Есть ли способ использовать плоский файл .rb для приема POST-запросов или мне нужно использовать фреймворк, такой как Rails или Sinatra, для принятия запроса?
Я думаю о том, как использовать плоский файл .php для приема запросов POST и использовать переменную $_REQUEST[]
для доступа к переданным данным.
Более конкретно, я пытаюсь немного изучить Ruby, портируя одно из моих приложений Twilio из PHP. Приложение принимает SMS, обрабатывает отправленное сообщение и отправляет ответ в зависимости от тела полученного сообщения.
При использовании PHP я могу установить URL-адрес SMS-запроса на сайте Twilio в свой PHP-файл. Файл PHP использует массив $_REQUEST[]
, чтобы использовать полученное сообщение. (Похоже, что Ruby эквивалентен этому params[]
.)
Вот краткий пример версии PHP того, о чем я говорю:
<?php
require "twilio.php"; // Twilio Library
$ApiVersion = "2010-04-01"; // Twilio API Version
$AccountSid = "SID"; // Twilio SID
$AuthToken = "TOKEN"; // Twilio Token
// Instantiate a new Twilio Rest Client
$client = new TwilioRestClient($AccountSid, $AuthToken);
// Get message body & who it's from, for the SMS that was just received
$SMSbody = mysql_real_escape_string($_REQUEST['Body']);
if ($SMScode == "codeword"){
$SMSresponse = "You know the code.";
}
else{
$SMSresponse = "You do not know the code.";
}
// Twilio response to the sender
header("content-type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
?>
<Response>
<Sms><?php echo $SMSresponse;?></Sms>
</Response>
Вот моя попытка Рубинового эквивалента , что, вероятно, оскорбительно плохо:
require "rubygems"
require "twilio-ruby"
@account_sid = "SID"
@auth_token = "TOKEN"
smsbody = params['body']
@client = Twilio::REST::Client.new(@account_sid, @auth_token)
@account = @client.accounts.get(@account_sid)
if smsbody == "codeword"
smsreply = "You know the code"
else
smsreply = "You do not know the code"
response = Twilio::TwiML::Response.new do |r|
r.Sms smsreply
end
# print the result
puts response.text
Это приводит к тому, что панель отладки Twilio утверждает, что ответ был длиннее 160 символов. Это потому, что ответом является полный код Ruby, а не результат того, что run код Ruby. Это заставляет меня думать, что запрос POST не принимается правильно ...