如何与twilio在定义的时间发送短信?

问题描述

我刚开始使用twilio进行启动。我们需要在约会前15分钟向客户发送短信。约会可以是每天1-5。我将约会的时间和日期以及相应客户的姓名和更多信息保存在csv文件中。

如何让twilio在所需时间从csv发送短信?

请注意,我只用python编码(我的水平是基本到中级)。我找到了这个例子:

onImageClick

如果我可以包括我编写的函数之类的东西,并且如果有何时发送消息的参数client.message.create的话,那将是很好的事情。

//import Timeline from "../elements/Timeline";
import Slider from "react-slick";
import "slick-carousel/slick/slick.css";
import "slick-carousel/slick/slick-theme.css";
import React,{ Component } from "react";
import Resume from "../../resume.json";
import TimeLineViewer from "./TimeLineViewer"
import { Link } from 'react-router-dom'

export default class Timeline extends React.Component {

    constructor(props) {
        super(props)
        this.changeHandler = this.changeHandler.bind(this)
        this.changeSlider = this.changeSlider.bind(this)
        this.state = {
            slideIndex: 0,updateCount: 0,settings: {
                dots: false,infinite: true,speed: 500,slidesToShow: 1,slidesToScroll: 1,afterChange: () =>
                    this.setState(state => ({ updateCount: state.updateCount + 1 })),beforeChange: (current,next) => this.setState({ slideIndex: next })
            }
        }
    }

    changeHandler(e) {
        this.sliderWrapper.slider.slickGoTo(e.target.value)
    }

    changeSlider() {
        this.setState({
            slideIndex: this.sliderWrapper.slider.innerSlider.state.currentSlide
        })
    }

    changeUpdateCount(e) {
        this.setState({
            updateCount: this.state.updateCount + 1
        },() => console.log(`test state after update: ${this.state.updateCount}`))
    }

    onImageClick = val => {
       // TimeLineViewer={val.week}
       return(
        <Link
        to={{
          pathname: "/timeLineViewer",productdetailProps: {
           productdetail: "I M passed From Props"
          }
       }}>
         </Link>
         )
      };

    render() {
        return (
            <div className="container" id="timeline">
                <h2>Slick Go To</h2>
                <p>Total updates: {this.state.settings.updateCount} </p>
                <input onChange={this.changeHandler} value={this.state.slideIndex} type='range' min={0} max={3} />
                <SliderWrapper onImageClick={this.onImageClick}
                    ref={sliderWrapper => this.sliderWrapper = sliderWrapper}
                    beforeChange={this.changeUpdateCount.bind(this)}
                    afterChange={this.changeSlider.bind(this)}
                    slideIndex={this.state.slideIndex}
                    updateCount={this.state.updateCount}
                />
            </div>
        );
    }
}


class SliderWrapper extends React.Component {

    shouldComponentUpdate(nextProps,nextState) {
        // certain condition here,perhaps comparison between this.props and nextProps
        // and if you want to update slider on setState in parent of this,return true,otherwise return false
        if (this.props.updateCount !== nextProps.updateCount) {
            return false
        }
        return true
    }

    sliders() {
        return Resume.weeks.map(week => {
            return (
                // Timeline items
                <section className="timeline-carousel">
                    <h1>week {week.week}</h1>
                    <div className="timeline-carousel__item-wrapper" data-js="timeline-carousel">
                        <div className="timeline-carousel__item">
                            <div key={week} className="timeline-carousel__image">
                                <img onClick={() => this.props.onImageClick(week)} alt="image" src={week.frontImage}  />
                                <h2>UNDER CONSTRUCTION IN PROGRES..</h2>
                            </div>
                            <div className="timeline-carousel__item-inner">
                            <div className="pointer" />
                                <span className="year">{week.year}</span>
                                <span className="month">{week.albumDate}</span>
                                <p>{week.summary}</p>
                                <a href="#" className="read-more">Read more</a>
                            </div>
                        </div>
                    </div>
                </section>
             )
        });
    }

    render() {
        const settings = {
            dots: false,infinite: false,speed: 100,slidesToShow: 4,afterChange: this.props.afterChange,beforeChange: this.props.beforeChange,responsive: [
                {
                  breakpoint: 700,settings: {
                    arrows: false,slidesToShow: 3
                  }
                },{
                  breakpoint: 500,slidesToShow: 2
                  }
                },{
                  breakpoint: 400,slidesToShow: 1
                  }
                }
            ]
        };
        return (
            <div >
                <Slider ref={slider => this.slider = slider} {...settings}>
                    {this.sliders()}
                </Slider>
            </div>
        );


    }
}

是否有使用python的简单解决方案?如果不是,是否有twilio的替代品?您还能提出什么其他建议? Tnx

解决方法

Twilio当前没有作业计划程序,因此您需要使用外部计划程序来执行其中一些任务,以下可能会有所帮助。

4 ways to schedule Node.js code

  • 是Node,但我想您可以导出Python的步骤

How to use email and SMS notifications together

,

另一种简单的方法是创建一个Google Apps脚本。您可以利用时钟触发器运行函数来获取URL来调用Twilio API来发送短信,这是在Google Apps脚本中发送twilio短信的基本功能。

function sendSms(){  
var messagesUrl = "https://api.twilio.com/2010-04-01/Accounts/YOUR_TWILIO_ACCOUNT_SID/Messages.json";
    
  var payload = {
    "To": "DESTINATION_NUMBER","From" : "YOUR_TWILIO_NUMBER","Body" : 'This is a reminder that you have an appointment',};
  
  var options = {
    "method" : "post","payload" : payload
  };
  
  options.headers = {    
    "Authorization" : "Basic " + Utilities.base64Encode('YOUR_ACCOUNT_SID:YOUR_AUTH_TOKEN')
  };
  UrlFetchApp.fetch(messagesUrl,options);
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...