Add per-customer SMS and Bird credentials to Frontdesk Integrations.
Deploy Ladill Frontdesk / deploy (push) Successful in 45s

NotificationDispatcher sends via customer relay and skips Frontdesk wallet debit when tenant keys are configured.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-07-12 17:05:54 +00:00
co-authored by Cursor
parent 0b45e08016
commit 8300cafc36
17 changed files with 1110 additions and 40 deletions
@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('frontdesk_messaging_credentials', function (Blueprint $table) {
$table->id();
$table->string('owner_ref')->index();
$table->foreignId('organization_id')->constrained('frontdesk_organizations')->cascadeOnDelete();
$table->text('sms_api_key_encrypted')->nullable();
$table->string('sms_api_key_prefix', 32)->nullable();
$table->string('sms_sender_id', 11)->nullable();
$table->string('sms_status', 32)->nullable();
$table->timestamp('sms_validated_at')->nullable();
$table->text('sms_last_error')->nullable();
$table->text('bird_api_key_encrypted')->nullable();
$table->string('bird_api_key_prefix', 32)->nullable();
$table->string('bird_from_email')->nullable();
$table->string('bird_from_name')->nullable();
$table->string('bird_status', 32)->nullable();
$table->timestamp('bird_validated_at')->nullable();
$table->text('bird_last_error')->nullable();
$table->timestamps();
$table->unique('organization_id');
});
}
public function down(): void
{
Schema::dropIfExists('frontdesk_messaging_credentials');
}
};