SDKs & Libraries
Official SDKs and libraries for popular programming languages to integrate Amanah AI WhatsApp Business API into your applications.
Overview
Our SDKs provide a convenient way to access the Amanah AI API from your applications. They handle authentication, request formatting, error handling, and provide type-safe interfaces.
🚀 Easy Integration
Simple, intuitive APIs that get you up and running quickly
🛡️ Type Safety
Full TypeScript support and type definitions included
📦 Auto Updates
Automatically stay up-to-date with the latest API features
Available SDKs
JavaScript/Node.js
Official JavaScript SDK for Node.js and browsers
npm install amanahagent-sdkPython
Official Python SDK with async support
pip install amanahagentPHP
Official PHP SDK for web applications
composer require amanahagent/sdkJava
Official Java SDK for enterprise applications
implementation 'com.amanahagent:sdk:1.3.0'Go
Official Go SDK for high-performance applications
go get github.com/amanahagent/go-sdkC# (.NET)
Official .NET SDK for Windows applications
dotnet add package Amanah AI.SDKJavaScript/Node.js SDK
Installation
# NPM npm install amanahagent-sdk # Yarn yarn add amanahagent-sdk # PNPM pnpm add amanahagent-sdk
Quick Start
const { Amanah AI } = require('amanahagent-sdk');
// or
import { Amanah AI } from 'amanahagent-sdk';
// Initialize the client
const client = new Amanah AI({
apiKey: 'your-api-key',
baseURL: 'https://api.amanahagent.cloud/v1' // optional
});
// Send a message
async function sendMessage() {
try {
const message = await client.messages.send({
to: '+1234567890',
type: 'text',
message: 'Hello from Amanah AI!'
});
console.log('Message sent:', message.message_id);
} catch (error) {
console.error('Error:', error.message);
}
}Advanced Usage
Send Media Messages
// Upload and send image
const media = await client.media.upload('./image.jpg');
const message = await client.messages.send({
to: '+1234567890',
type: 'media',
media_url: media.url
});
// Send document with filename
const message = await client.messages.send({
to: '+1234567890',
type: 'media',
media_url: 'https://example.com/document.pdf',
filename: 'Important Document.pdf'
});Template Messages
// Send template message
const message = await client.messages.sendTemplate({
to: '+1234567890',
template: {
name: 'welcome_message',
language: 'en',
components: [
{
type: 'header',
parameters: [{ type: 'text', text: 'Amanah AI' }]
},
{
type: 'body',
parameters: [{ type: 'text', text: 'John Doe' }]
}
]
}
});Contact Management
// Create contact
const contact = await client.contacts.create({
phone: '+1234567890',
name: 'John Doe',
tags: ['customer', 'premium'],
custom_fields: {
company: 'Acme Corp',
department: 'Sales'
}
});
// Get contacts with pagination
const contacts = await client.contacts.list({
page: 1,
limit: 50,
search: 'john'
});Webhook Configuration
// Configure webhook
const webhook = await client.webhooks.create({
url: 'https://your-app.com/webhooks',
events: ['message.sent', 'message.delivered', 'message.received'],
secret: 'your-webhook-secret'
});
// Verify webhook signature (Express middleware)
const verifyWebhook = client.webhooks.verifyMiddleware('your-secret');
app.use('/webhooks', verifyWebhook);TypeScript Support
import {
Amanah AI,
Message,
Contact,
MessageType,
WebhookEvent
} from 'amanahagent-sdk';
const client = new Amanah AI({ apiKey: 'your-api-key' });
// Type-safe message sending
const message: Message = await client.messages.send({
to: '+1234567890',
type: MessageType.TEXT,
message: 'Hello!'
});
// Webhook event handling
function handleWebhook(event: WebhookEvent) {
switch (event.event) {
case 'message.sent':
console.log('Message sent:', event.data.message_id);
break;
case 'message.received':
console.log('New message from:', event.data.from);
break;
}
}Configuration Options
| Option | Type | Default | Description |
|---|---|---|---|
| apiKey | string | - | Your Amanah AI API key |
| baseURL | string | https://api.amanahagent.cloud/v1 | API base URL |
| timeout | number | 30000 | Request timeout in milliseconds |
| retries | number | 3 | Number of retry attempts |
Python SDK
Installation
# Install with pip pip install amanahagent # Install with poetry poetry add amanahagent # Install with pipenv pipenv install amanahagent
Quick Start
from amanahagent import Amanah AI
# Initialize the client
client = Amanah AI(api_key='your-api-key')
# Send a message
try:
message = client.messages.send(
to='+1234567890',
type='text',
message='Hello from Amanah AI!'
)
print(f'Message sent: {message.message_id}')
except Exception as error:
print(f'Error: {error}')Async Support
import asyncio
from amanahagent import AsyncAmanah AI
async def send_message():
client = AsyncAmanah AI(api_key='your-api-key')
try:
message = await client.messages.send(
to='+1234567890',
type='text',
message='Hello from async Amanah AI!'
)
print(f'Message sent: {message.message_id}')
except Exception as error:
print(f'Error: {error}')
finally:
await client.close()
# Run async function
asyncio.run(send_message())Django Integration
# settings.py
AMANAHAGENT_API_KEY = 'your-api-key'
# views.py
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from amanahagent import Amanah AI
from django.conf import settings
import json
client = Amanah AI(api_key=settings.AMANAHAGENT_API_KEY)
@csrf_exempt
@require_http_methods(["POST"])
def send_message(request):
data = json.loads(request.body)
try:
message = client.messages.send(
to=data['to'],
type=data['type'],
message=data['message']
)
return JsonResponse({'message_id': message.message_id})
except Exception as error:
return JsonResponse({'error': str(error)}, status=400)Flask Integration
from flask import Flask, request, jsonify
from amanahagent import Amanah AI
import os
app = Flask(__name__)
client = Amanah AI(api_key=os.environ['AMANAHAGENT_API_KEY'])
@app.route('/send-message', methods=['POST'])
def send_message():
data = request.json
try:
message = client.messages.send(
to=data['to'],
type=data['type'],
message=data['message']
)
return jsonify({'message_id': message.message_id})
except Exception as error:
return jsonify({'error': str(error)}), 400
# Webhook handler with signature verification
@app.route('/webhooks/amanahagent', methods=['POST'])
def webhook_handler():
signature = request.headers.get('X-Webhook-Signature')
if client.webhooks.verify_signature(request.data, signature, 'your-secret'):
event = request.json
print(f"Received event: {event['event']}")
return jsonify({'status': 'success'})
else:
return jsonify({'error': 'Invalid signature'}), 401PHP SDK
Installation
# Install via Composer
composer require amanahagent/sdk
# Or add to your composer.json
{
"require": {
"amanahagent/sdk": "^1.5"
}
}Quick Start
<?php
require_once 'vendor/autoload.php';
use Amanah AI\SDK\Amanah AI;
// Initialize the client
$client = new Amanah AI([
'api_key' => 'your-api-key'
]);
// Send a message
try {
$message = $client->messages->send([
'to' => '+1234567890',
'type' => 'text',
'message' => 'Hello from Amanah AI!'
]);
echo "Message sent: " . $message->message_id;
} catch (Exception $error) {
echo "Error: " . $error->getMessage();
}
?>Laravel Integration
// config/services.php
'amanahagent' => [
'api_key' => env('AMANAHAGENT_API_KEY'),
],
// app/Services/WhatsAppService.php
<?php
namespace App\Services;
use Amanah AI\SDK\Amanah AI;
class WhatsAppService
{
private $client;
public function __construct()
{
$this->client = new Amanah AI([
'api_key' => config('services.amanahagent.api_key')
]);
}
public function sendMessage($to, $message)
{
return $this->client->messages->send([
'to' => $to,
'type' => 'text',
'message' => $message
]);
}
}
// app/Http/Controllers/WhatsAppController.php
<?php
namespace App\Http\Controllers;
use App\Services\WhatsAppService;
use Illuminate\Http\Request;
class WhatsAppController extends Controller
{
public function sendMessage(Request $request, WhatsAppService $whatsapp)
{
$request->validate([
'to' => 'required|string',
'message' => 'required|string'
]);
try {
$message = $whatsapp->sendMessage(
$request->to,
$request->message
);
return response()->json(['message_id' => $message->message_id]);
} catch (Exception $e) {
return response()->json(['error' => $e->getMessage()], 400);
}
}
}Webhook Handling
<?php
// webhook.php
require_once 'vendor/autoload.php';
use Amanah AI\SDK\Amanah AI;
$client = new Amanah AI(['api_key' => 'your-api-key']);
// Get the raw POST data
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';
// Verify signature
if ($client->webhooks->verifySignature($payload, $signature, 'your-secret')) {
$event = json_decode($payload, true);
// Handle different event types
switch ($event['event']) {
case 'message.delivered':
// Handle message delivered
error_log("Message delivered: " . $event['data']['message_id']);
break;
case 'message.received':
// Handle incoming message
$from = $event['data']['from'];
$message = $event['data']['message'];
error_log("Received message from {$from}: {$message}");
break;
}
http_response_code(200);
echo 'OK';
} else {
http_response_code(401);
echo 'Unauthorized';
}
?>Java SDK
Installation
Gradle
// build.gradle
dependencies {
implementation 'com.amanahagent:sdk:1.3.0'
}Maven
<!-- pom.xml -->
<dependency>
<groupId>com.amanahagent</groupId>
<artifactId>sdk</artifactId>
<version>1.3.0</version>
</dependency>Quick Start
import com.amanahagent.sdk.Amanah AI;
import com.amanahagent.sdk.models.Message;
import com.amanahagent.sdk.models.SendMessageRequest;
public class WhatsAppExample {
public static void main(String[] args) {
// Initialize the client
Amanah AI client = Amanah AI.builder()
.apiKey("your-api-key")
.build();
// Send a message
try {
SendMessageRequest request = SendMessageRequest.builder()
.to("+1234567890")
.type("text")
.message("Hello from Amanah AI!")
.build();
Message message = client.messages().send(request);
System.out.println("Message sent: " + message.getMessageId());
} catch (Exception error) {
System.err.println("Error: " + error.getMessage());
}
}
}Spring Boot Integration
// application.yml
amanahagent:
api-key: your-api-key
// Amanah AIConfig.java
@Configuration
public class Amanah AIConfig {
@Value("${amanahagent.api-key}")
private String apiKey;
@Bean
public Amanah AI amanahAgent() {
return Amanah AI.builder()
.apiKey(apiKey)
.build();
}
}
// WhatsAppService.java
@Service
public class WhatsAppService {
private final Amanah AI client;
public WhatsAppService(Amanah AI client) {
this.client = client;
}
public Message sendMessage(String to, String message) {
SendMessageRequest request = SendMessageRequest.builder()
.to(to)
.type("text")
.message(message)
.build();
return client.messages().send(request);
}
}
// WhatsAppController.java
@RestController
@RequestMapping("/api/whatsapp")
public class WhatsAppController {
private final WhatsAppService whatsAppService;
public WhatsAppController(WhatsAppService whatsAppService) {
this.whatsAppService = whatsAppService;
}
@PostMapping("/send")
public ResponseEntity<MessageResponse> sendMessage(@RequestBody MessageRequest request) {
try {
Message message = whatsAppService.sendMessage(request.getTo(), request.getMessage());
return ResponseEntity.ok(new MessageResponse(message.getMessageId()));
} catch (Exception e) {
return ResponseEntity.badRequest()
.body(new MessageResponse(null, e.getMessage()));
}
}
}Go SDK
Installation
# Install the SDK go get github.com/amanahagent/go-sdk # Initialize go module (if not already done) go mod init your-project go mod tidy
Quick Start
package main
import (
"context"
"fmt"
"log"
"github.com/amanahagent/go-sdk"
)
func main() {
// Initialize the client
client := amanahagent.New("your-api-key")
// Send a message
ctx := context.Background()
message, err := client.Messages.Send(ctx, &amanahagent.SendMessageRequest{
To: "+1234567890",
Type: "text",
Message: "Hello from Amanah AI!",
})
if err != nil {
log.Fatal("Error sending message:", err)
}
fmt.Printf("Message sent: %s\n", message.MessageID)
}Gin Framework Integration
package main
import (
"net/http"
"os"
"github.com/gin-gonic/gin"
"github.com/amanahagent/go-sdk"
)
type MessageRequest struct {
To string `json:"to" binding:"required"`
Message string `json:"message" binding:"required"`
}
func main() {
// Initialize Amanah AI client
client := amanahagent.New(os.Getenv("AMANAHAGENT_API_KEY"))
r := gin.Default()
r.POST("/send-message", func(c *gin.Context) {
var req MessageRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
message, err := client.Messages.Send(c.Request.Context(), &amanahagent.SendMessageRequest{
To: req.To,
Type: "text",
Message: req.Message,
})
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"message_id": message.MessageID})
})
r.Run(":8080")
}Webhook Handling
package main
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"os"
"strings"
"github.com/amanahagent/go-sdk"
)
func verifySignature(payload []byte, signature, secret string) bool {
mac := hmac.New(sha256.New, []byte(secret))
mac.Write(payload)
calculatedSignature := "sha256=" + hex.EncodeToString(mac.Sum(nil))
return hmac.Equal([]byte(signature), []byte(calculatedSignature))
}
func webhookHandler(w http.ResponseWriter, r *http.Request) {
payload, err := ioutil.ReadAll(r.Body)
if err != nil {
http.Error(w, "Error reading request body", http.StatusBadRequest)
return
}
signature := r.Header.Get("X-Webhook-Signature")
secret := os.Getenv("WEBHOOK_SECRET")
if !verifySignature(payload, signature, secret) {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
var event amanahagent.WebhookEvent
if err := json.Unmarshal(payload, &event); err != nil {
http.Error(w, "Error parsing JSON", http.StatusBadRequest)
return
}
// Handle different event types
switch event.Event {
case "message.delivered":
fmt.Printf("Message delivered: %s\n", event.Data.MessageID)
case "message.received":
fmt.Printf("Received message from %s: %s\n", event.Data.From, event.Data.Message)
}
w.WriteHeader(http.StatusOK)
w.Write([]byte("OK"))
}
func main() {
http.HandleFunc("/webhooks/amanahagent", webhookHandler)
log.Println("Webhook server listening on :8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}SDK Feature Comparison
| Feature | JavaScript | Python | PHP | Java | Go | C# |
|---|---|---|---|---|---|---|
| Message Sending | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Media Upload | ✓ | ✓ | ✓ | ✓ | ✓ | ⚠ |
| Template Messages | ✓ | ✓ | ✓ | ✓ | ✓ | ⚠ |
| Contact Management | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
| Webhook Verification | ✓ | ✓ | ✓ | ✓ | ✓ | ⚠ |
| TypeScript/Type Safety | ✓ | ✓ | ✗ | ✓ | ✓ | ✓ |
| Async Support | ✓ | ✓ | ✗ | ✓ | ✓ | ⚠ |
✓ Full support
⚠ Partial/Beta support
✗ Not yet available
Contributing
We welcome contributions to our SDKs! Each SDK is open source and hosted on GitHub.
🐛 Found a Bug?
Open an issue on the respective GitHub repository with detailed information about the bug.
View Repositories →💡 Feature Request?
Submit a feature request or contribute new functionality via pull requests.
Contact Support →