2013-05-25 4 views
2

Я пытаюсь создать приложение, которое принимает SMS-сообщение через Twilio, а затем создает транзакцию регистрации/вывода, привязанную к моделям сотрудников и моделей товаров. Простой SMS-оповещение о контроле/отслеживании товаров. У меня есть приложение twilio, подключенное для прослушивания на tooler.herokuapp.com/twilio/twilio_create, но когда я отправляю сообщения на номер, ничего не происходит, и я получаю ошибку 404 в журналах twilio. Не уверен, что происходит, надеялся, что кто-то сможет помочь. В этом случае я беру FROM из twilio и помещаю его в employee_id, а BODY - из twilio и помещая его в item_id. Почему он не создает новые транзакции?Получение сообщений об ошибках Twilio 404 Получение SMS

дб/schema.rb

ActiveRecord::Schema.define(:version => 20130516162824) do 

     create_table "employees", :force => true do |t| 
     t.string "phone" 
     t.string "name" 
     t.datetime "created_at", :null => false 
     t.datetime "updated_at", :null => false 
     end 

     create_table "items", :force => true do |t| 
     t.string "description" 
     t.string "assettag" 
     t.datetime "created_at", :null => false 
     t.datetime "updated_at", :null => false 
     end 

     create_table "transactions", :force => true do |t| 
     t.boolean "status" 
     t.integer "item_id" 
     t.integer "employee_id" 
     t.datetime "created_at", :null => false 
     t.datetime "updated_at", :null => false 
     end 

     add_index "transactions", ["employee_id"], :name => "index_transactions_on_employee_id" 
     add_index "transactions", ["item_id"], :name => "index_transactions_on_item_id" 

     create_table "users", :force => true do |t| 
     t.string "email",     :default => "", :null => false 
     t.string "encrypted_password",  :default => "", :null => false 
     t.string "reset_password_token" 
     t.datetime "reset_password_sent_at" 
     t.datetime "remember_created_at" 
     t.integer "sign_in_count",   :default => 0 
     t.datetime "current_sign_in_at" 
     t.datetime "last_sign_in_at" 
     t.string "current_sign_in_ip" 
     t.string "last_sign_in_ip" 
     t.datetime "created_at",        :null => false 
     t.datetime "updated_at",        :null => false 
     end 

     add_index "users", ["email"], :name => "index_users_on_email", :unique => true 
     add_index "users", ["reset_password_token"], :name => "index_users_on_reset_password_token", :unique => true 

    end 

приложение/контроллеры/twilio_controller.rb

class TwilioController < ApplicationController 

     def process_sms 
     @city = params[:FromCity].capitalize 
     @state = params[:FromState] 
      render 'process_sms.xml.erb', :content_type => 'text/xml' 
     end 

     def twilio_create 
     @transaction = Transaction.new(:item_id => params[:Body], :employee_id => params[:From]) 
     @transaction.save 
     end 

    end 

приложение/просмотров/Twilio/twilio_create.xml.erb

<Response>                             
    <Sms>Received. You checked out <%= @body %>, <%= @from %> you lucky bastard.</Sms> 
</Response> 

Я уже заставил его работать с страницей process_sms, поэтому я знаю, что это что-то с функцией twilio_create. Что я делаю не так?

ответ

1

Должно ли URL-адрес tooler.herokuapp.com/twilio/twilio_create.xml? Вы можете проверить rake routes, чтобы увидеть все URL-адреса, соответствующие вашему config/routes.rb.

На самом деле, Rails уже имеет соглашение CRUD. Так как вы создаете Twilio ресурс, ваш config/routes.rb должен быть:

# config/routes.rb 
resources :twilio do 
    collection do 
    get :process_sms 
    end 
end 

В контроллере, вы должны использовать def create вместо def twilio_create.

class TwilioController < ApplicationController 

    def process_sms 
    @city = params[:FromCity].capitalize 
    @state = params[:FromState] 
     render 'process_sms.xml.erb', :content_type => 'text/xml' 
    end 

    def create 
    @transaction = Transaction.new(:item_id => params[:Body], :employee_id => params[:From]) 
    @transaction.save 
    end 

end 

Наконец, переименовывать app/views/twilio/twilio_create.xml.erb в app/views/twilio/create.xml.erb.

Чтобы создать новую транзакцию, сделайте запрос post на номер tooler.herokuapp.com/twilio.xml. Этот URL-адрес попадет в def create в TwilioController и сделает app/views/twilio/create.xml.erb.

Если он по-прежнему не работает из-за ошибки 404, вы можете проверить rake routes, чтобы увидеть все URL-адреса, соответствующие вашему config/routes.rb.

+0

Пробовал это ... это то, что я получил: Ошибка восстановления HTTP-кода ERROR вернула код состояния HTTP 500. AccountSid \t AC403799e6989feb71259aff925d6d6b17 ApiVersion \t 2010-04-01 тела \t Huh От \t +17177564437 FromCity \t HARRISBURG FromCountry \t США FromState \t PA FromZip SmsMessageSid \t SMaa17fbe4cc6a1afb29bff8c5921e4867 SmsSid \t SMaa17fbe4cc6a1afb29bff8c5921e4867 SmsStatus \t получил К \t +17177395006 ToCity \t SPRING GROVE ToCountry \t США ToState \t PA ToZip Сожалеем, но что-то пошло не так (500) momchenr

+0

Это из журналы в Twilio, раздел отладчика. Пробовал то, что вы рекомендовали, и оно не вышло. Рейк-маршруты выглядят хорошо, у меня есть запись POST для/twilio, которая заканчивается twilio # create. Раньше я получал 404, теперь они 500. – momchenr

+0

И теперь я не могу создавать нормальные транзакции через веб-интерфейс - я создал исходную модель транзакций, просто чтобы убедиться, что я правильно понял отношения ... теперь, когда я пытаюсь создать один за другим через веб-приложение, ошибки. – momchenr

Смежные вопросы