问题描述
我刚开始使用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);
}