
Security News
Axios Supply Chain Attack Reaches OpenAI macOS Signing Pipeline, Forces Certificate Rotation
OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.
AfricasTalking node.js Sandbox API wrapper
This is a wrapper for the Africa's Talking Sandbox API. It tracks the Official Africa's talking API. The documentation provided here is the same.
$ npm install --save atsandbox
var options = {
apiKey: 'YOUR_API_KEY',
username: 'YOUR_USERNAME',
format: 'json' // or xml
};
var AfricasTalking = require('africastalking')(options);
// ...
Important: If you register a callback URL with the API, always remember to acknowledge the receipt of any data it sends by responding with an HTTP 200; e.g. res.status(200); for express.
var sms = AfricasTalking.SMS;
// all methods return a promise
sms.send(opts)
.then(success)
.catch(error);
send(options): Send a message. options contains:
to: A single recipient or an array of recipients. REQUIREDfrom: Shortcode or alphanumeric ID that is registered with Africa's Talking account.message: SMS content. REQUIREDsendBulk(options): Send bulk SMS. In addition to paramaters of send(), we would have:
enqueue: "[...] would like deliver as many messages to the API before waiting for an Ack from the Telcos."sendPremium(options): Send premium SMS. In addition to paramaters of send(), we would have:
keyword: Value is a premium keyword REQUIREDlinkId: "[...] We forward the linkId to your application when the user send a message to your service" REQUIREDretryDurationInHours: "It specifies the number of hours your subscription message should be retried in case it's not delivered to the subscriber"You can register a callback URL with us and we will forward any messages that are sent to your account the moment they arrive. Read more
fetchMessages(options): Manually retrieve your messages.
lastReceivedId: "This is the id of the message that you last processed". Defaults to 0. REQUIREDIf you have subscription products on your premium SMS short codes, you will need to configure a callback URL that we will invoke to notify you when users subscribe or unsubscribe from your products. Read more
createSubscription(options):
shortCode: "This is a premium short code mapped to your account". REQUIREDkeyword: "Value is a premium keyword under the above short code and mapped to your account". REQUIREDphoneNumber: "The phoneNumber to be subscribed" REQUIREDfetchSubscription(options):
shortCode: "This is a premium short code mapped to your account". REQUIREDkeyword: "Value is a premium keyword under the above short code and mapped to your account". REQUIREDlastReceivedId: "ID of the subscription you believe to be your last." Defaults to 0Processing USSD requests using our API is very easy once your account is set up. In particular, you will need to:
- Register a service code with us.
- Register a URL that we can call whenever we get a request from a client coming into our system.
Once you register your callback URL, any requests that we receive belonging to you will trigger a callback that sends the request data to that page using HTTP POST. Read more.
If you are using connect-like frameworks (express), you could use the middleware AfricasTalking.USSD(handler):
handler(params, next): Process USSD request and call next() when done.
params: contains the following user data sent by Africa's Talking servers: sessionId, serviceCode, phoneNumber and text.next(args): args must contain the following:
response: Text to display on user's device. REQUIREDendSession: Boolean to decide whether to END session or to CONtinue it. REQUIRED
// example (express)
app.post('/natoil-ussd', new AfricasTalking.USSD((params, next) => {
var endSession = false;
var message = '';
var session = sessions.get(params.sessionId);
var user = db.getUserByPhone(params.phoneNumber);
if (params.text === '') {
message = "Welcome to Nat Oil \n";
message += "1: For account info \n";
message += "2: For lost gas cylinder";
} else if (params.text === '1') {
message = user.getInfo();
endSession = true;
} else if (params.text === '2') {
message = "Enter 1 for recovery \n";
message += "Enter 2 for lost and found";
endSession = true;
} else {
message = "Invalid option";
endSession = true;
}
next({
response: message,
endSession: endSession
});
}));
var voice = AfricasTalking.VOICE;
xml to send back to Africa's Taking API when it comes POSTing. Read more
Say, Play, GetDigits, Dial, Record, Enqueue, Dequeue, Conference, Redirect, RejectPlay will be cached by default. voice.call({
callFrom: '+2547XXXXXXXX', // AT virtual number
callTo: from_
})
.then(function(s) {
// persist call Info
console.log(s);
})
.catch(function(error) {
console.log(error);
});
voice.getNumQueuedCalls({
phoneNumbers: destinationNumber
})
.then(function(s) {
// call queue
console.log(s);
})
.catch(function(error) {
console.log(error);
});
check issue #15
var airtime = AfricasTalking.AIRTIME;
airtime.send(options): Send airtime
recipients: An array of the following
phoneNumber: Recipient of airtimeamount: Amount sent. >= 10 && <= 10K airtime.send(options)
.then(success)
.catch(error);
AfricasTalking.fetchAccount()
.then(success)
.catch(error);
fetchAccount(): Fetch account info; i.e. balancevar payment = AfricasTalking.PAYMENT;
payment.checkOut({
phoneNumber : '+2547XXXXXXXX',
productName : 'your_productName',
currencyCode : 'KES',
metadata : { id: uuid.v4() },
amount : 100
})
.then(function(s) {
// persist payment status
console.log(s);
})
.catch(function(error) {
console.log(error);
});
???
???
FAQs
AfricasTalking node.js Sandbox API wrapper
The npm package atsandbox receives a total of 1 weekly downloads. As such, atsandbox popularity was classified as not popular.
We found that atsandbox demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.

Security News
Open source is under attack because of how much value it creates. It has been the foundation of every major software innovation for the last three decades. This is not the time to walk away from it.

Security News
Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.