【问题标题】:Twilio SMS using Ruby使用 Ruby 的 Twilio 短信
【发布时间】:2018-02-19 02:02:48
【问题描述】:

我一直在开发一个程序,它可以读取 CSV excel 文件并过滤要通过短信发送的信息。目前,该程序只能通过短信发送一行过滤信息。应该修改什么以便能够逐行单独发送?

当前代码在第 1 列和第 2 列搜索“中”和“2”。它将发送第 0 列和第 4 列。因此结果将是“DT3/SIG,”修复 Windows” 但它不会发出第 5 行 - “90430/RSO”、“维修灯”

require 'rubygems'
require 'twilio-ruby'
require "csv"

def load_alarms
  CSV.read 'alarms.csv', {col_sep: ';'}
end

def filter_by_event_type_and_severity(alarms, event_type, severity)
  alarms.select do |alarm|
    alarm[1] == event_type && alarm[2].to_i == severity.to_i
  end
end

target_alarms = filter_by_event_type_and_severity(
    load_alarms, 'medium', 2)
equipments  = target_alarms.map { |alarm| [alarm[0], alarm[3]] }

p equipments

account_sid = 'ACCOUNT_ID'
auth_token = 'AUTH_TOKEN'
client = Twilio::REST::Client.new account_sid, auth_token

client.api.account.messages.create(
    from: 'SENDER_PHONE',
    to: 'TARGET_PHONE',
    body: equipments
  )

【问题讨论】:

  • 您应该遍历equipments 并使用client.api.account.messages.create 发送每个...类似于:equipments.each do |equipment| ...client.api.account.messages.create... end
  • 抱歉,我实际上对编程很陌生,我不确定你会如何构建它,你能写一个示例代码吗?谢谢
  • 好的,会在几分钟内完成 :)

标签: ruby csv twilio


【解决方案1】:

正如我在评论中所写,您需要做的就是遍历您从filter_by_event_type_and_severity 方法获得的equipments,并使用twillo api 将它们一一发送:

require 'rubygems'
require 'twilio-ruby'
require "csv"

def load_alarms
  CSV.read 'alarms.csv', {col_sep: ';'}
end

def filter_by_event_type_and_severity(alarms, event_type, severity)
  alarms.select do |alarm|
    alarm[1] == event_type && alarm[2].to_i == severity.to_i
  end
end

target_alarms = filter_by_event_type_and_severity(load_alarms, 'medium', 2)
equipments  = target_alarms.map { |alarm| [alarm[0], alarm[3]] }

account_sid = 'ACCOUNT_ID'
auth_token = 'AUTH_TOKEN'
client = Twilio::REST::Client.new account_sid, auth_token

# Here is the iteration
equipments.each do |equipment|
  client.api.account.messages.create(
    from: 'SENDER_PHONE',
    to: 'TARGET_PHONE',
    body: equipment
  )
end

我删除了你的 account_id、auth_token 和电话号码,所以你需要重新添加它们

【讨论】:

  • 啊抱歉,我意识到它只发送第 0 列但它不发送第 3 列。有没有办法解决这个问题?
  • 现在,body 包含equipment 对象,它是一个包含 2 个事物的数组,即设备 ID 和设备描述。您可能希望以所需格式格式化包含该信息的字符串。你希望那个字符串看起来像什么?您可以在equipments.each 行之后添加id, description = equipment,然后根据需要使用它们构建一个字符串,并将该字符串作为正文发送。例如,"#{id} - #{description}" 作为正文。
  • 对不起,让我澄清一下。我添加了“p 设备”行,它会打印设备 ID 和描述。 [“ID”,“描述”]。正文应该发送相同的信息,但我只收到了“id”。
  • @JoshuaNg 如果它显示为["id", "Description"],那么您可以尝试`"#{equipment[0]} - #{equipment[1]}" - 如果它作为一个数组。 (@KeithBennett 的方法不起作用?)
  • 这是试错的时候了! :D(如果我有你的 csv 文件,我可以自己尝试)但尝试body: "#{equipment[0]} - #{equipment[1]}"(此评论部分越来越长,如果您需要更多帮助,请加入我为帮助您而创建的THIS CHAT ROOM ^^)
猜你喜欢
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
  • 2014-05-27
  • 2018-02-14
  • 1970-01-01
  • 2018-06-03
  • 2019-03-26
相关资源
最近更新 更多